#   --------------------------------注释区--------------------------------
#   警告！！请确认此时无阅读本在执行,否则会造成数据相互污染！由此造成的不良结果概不负责
#   警告！！请确保脚本运行结束,切勿中途自行结束！由此造成的不良结果概不负责
#   公众号取关脚本
#
#   需抓取数据: 
#   * 填写自动过检的api接口 本地 内网ip:5000 非本地自行进行穿透 变量名:yuanshen_api
#   * 登录多少个账号就跑多少个账号
#   * 此本提供白名单+黑名单功能 只能使用一个名单
#   * 白名单: 设置要跑的Wxid到环境变量 huaji_gzhqg_whitelist  多号#分割
#   * 黑名单: 设置要不跑的Wxid到环境变量 huaji_gzhqg_blacklist  多号#分割
#   * 注意两名单只能设置一个 同时设置优先读取白名单 当然你可以都不设置这样什么号都会跑
#
# 下面是自定义变量设置(注意是修改对应的环境变量而不是改文件内容):
# huaji_gzhqg_day   默认16 取关关注时间大于x天的公众号,x为此变量值,推荐默认,否则可能会封禁任务
#   --------------------------------一般不动区--------------------------------
#                     _ooOoo_
#                    o8888888o
#                    88" . "88
#                    (| -_- |)
#                     O\ = /O
#                 ____/`---'\____
#               .   ' \\| |// `.
#                / \\||| : |||// \
#              / _||||| -:- |||||- \
#                | | \\\ - /// | |
#              | \_| ''\---/'' | |
#               \ .-\__ `-` ___/-. /
#            ___`. .' /--.--\ `. . __
#         ."" '< `.___\_<|>_/___.' >'"".
#        | | : `- \`.;`\ _ /`;.`/ - ` : | |
#          \ \ `-. \_ __\ /__ _/ .-` / /
#  ======`-.____`-.___\_____/___.-`____.-'======
#                     `=---='
# 
#  .............................................
#           佛祖保佑             永无BUG
#           佛祖镇楼             BUG辟邪
#佛曰:  
#        写字楼里写字间，写字间里程序员；  
#        程序人员写程序，又拿程序换酒钱。  
#        酒醒只在网上坐，酒醉还来网下眠；  
#        酒醉酒醒日复日，网上网下年复年。  
#        但愿老死电脑间，不愿鞠躬老板前；  
#        奔驰宝马贵者趣，公交自行程序员。  
#        别人笑我忒疯癫，我笑自己命太贱；  
#        不见满街漂亮妹，哪个归得程序员？
#
#   --------------------------------代码区--------------------------------
'''
Create at [2025-03-27 19:14:56]
'''
import requests
import os
import sys
import platform
import subprocess
import importlib
import datetime
from urllib.parse import urlparse
import logging
import socket
logging.basicConfig(level=logging.INFO, format='[%(levelname)s] ===> %(message)s')
log = logging.getLogger(__name__)

THIS_Proxies = 'https://github.huaji.asia/'   # 网络不行就填Github代理 这里只给出一个要是不行就自己找 https://github.huaji.asia/

data = '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'
func = 'main'

GithubUrl = f"{THIS_Proxies.rstrip('/')}/https://raw.githubusercontent.com/huaji8/So_common/master/so" if THIS_Proxies else 'https://raw.githubusercontent.com/huaji8/So_common/master/so'
THIS_MODE = 'Huaji_SoLoader'
So_name = f'{THIS_MODE}.so'




def get_system_info() -> None:
    global Download_name
    python_version = f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}"
    download_pyver = f'{sys.version_info.major}.{sys.version_info.minor}'
    processor_arch = platform.machine().replace('AMD64', 'x86_64').replace('x64', 'x86_64')
    system_name = platform.system()
    system_ver = platform.release() + " " + platform.version()
    system_arch = platform.architecture()[0]
    if system_name == "Darwin":
        system_name = "macOS"
        system_ver = platform.mac_ver()[0]
    elif system_name == "Windows":
        system_ver = f"{platform.release()} (Build {platform.win32_ver()[1]})"
    
    log.info(f"系统信息 [Python/{python_version}] [系统架构 {processor_arch}] [{system_name}/{system_ver} {system_arch}]")
    if download_pyver not in ['3.10','3.11','3.12']:
        log.error(f'当前Python版本不支持运行此脚本，请使用Python3.10或3.11或3.12运行此脚本,什么??你不重装,简单,删除本脚本然后睡觉觉就行了..')
        
    if processor_arch == 'x86_64' and system_name == 'Linux':
        Download_name = f'{THIS_MODE}_{download_pyver}_x64.so'
    elif processor_arch == 'aarch64' and system_name == 'Linux':
        Download_name = f'{THIS_MODE}_{download_pyver}_aarch64.so'
    else:
        Download_name = f'{THIS_MODE}_{download_pyver}_x64.so'
        
    if processor_arch not in ['x86_64', 'aarch64']:
        log.warning(f'当前系统架构大概率不支持运行此脚本...')
        return
    elif 'Linux' not in system_name:
        log.error(f'当前系统不支持运行此脚本，请使用Linux运行此脚本')
    else:
        log.info('系统检测通过,开始运行脚本')
        return
    
    
    
    exit()



def download_file(save_path: str = None) -> bool:
    url =  GithubUrl + '/' + Download_name
    
    try:
        try:
            socket.create_connection(("www.github.com", 80), timeout=5)
            socket.create_connection(("www.github.com", 443), timeout=5)
        except (socket.timeout, socket.gaierror):
            log.warning("无法连接到Github,大概率下载是失败的,请检查网络或使用代理")

        if not save_path:
            file_name = os.path.basename(urlparse(url).path) or "downloaded_file"
            save_path = os.path.join(os.getcwd(), file_name)
        if os.path.exists(save_path) and os.path.getsize(save_path) == 0:
            os.remove(save_path)
        save_dir = os.path.dirname(save_path)
        os.makedirs(save_dir, exist_ok=True)
        curl_cmd = "curl.exe" if platform.system() == "Windows" else "curl"
        cmd = [
            curl_cmd,
            "-L", 
            "-f",
            "--silent",
            "--show-error",
            "-o", save_path,
            "-m","180",
            url
        ]

        result = subprocess.run(
            cmd,
            check=True,
            stdout=subprocess.PIPE,
            stderr=subprocess.PIPE,
            text=True
        )


        if not os.path.exists(save_path):
            log.error(f"下载文件不存在: {save_path}")
            return False
        if os.path.getsize(save_path) == 0:
            os.remove(save_path)
            log.error(f"下载文件为空: {save_path}")
            return False
        if result.returncode != 0:
            log.error(f"下载失败: {result.stderr.strip()}")
            return False
        log.info(f"文件下载成功: {save_path}")
        os.rename(Download_name, So_name)
        return True

    except subprocess.CalledProcessError as e:
        error_msg = f"下载失败: {e.stderr.strip()}" if e.stderr else "未知curl错误"
        log.error(error_msg)
        return False
    except Exception as e:
        log.error(f"下载异常: {str(e)}")
        return False
    
def dynamic_import(module_name: str) -> object:
    return importlib.import_module(module_name)

    
def Run() -> None:
    if os.path.exists(So_name):
        log.info('so文件存在,开始运行')
        print('='*30)
        obj = dynamic_import(THIS_MODE)
        obj.run(func, data)
    else:
        log.info('so文件不存在,开始下载')
        if download_file():
            Run()
        else:
            log.error('下载失败,请检查网络或使用代理')


if __name__ == '__main__':
    get_system_info()
    Run()
